import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

public class TestJDBC2 {
    public static void main(String[] args) throws SQLException {
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java101?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("109614");
//2.数据库连接
        Connection connection = dataSource.getConnection();

//        我希望用户通过控制台,输入学号和姓名
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入学号: ");
        int id = scanner.nextInt();
        System.out.println("请输入姓名: ");
//        String name = scanner.nextLine();//不行,为什么.要使用这个,得在最前面,不然会跳过的
        String name = scanner.next();

//        String sql = "insert into student values(" + id + ",'" + name + "')";
        /**
         * 可以使用字符串拼接的方式,来构造一个动态的sql
         * 这种方式不太好.
         * 1.拼接起来,太麻烦
         * 2.可能存在安全隐患=>直接拼sql可能会造成sql注入攻击漏洞
         * 假如用户输入的name是这个样子的:zhangsan');drop database xxx;
         */
//        改进:
//        ?表示占位符,会在后面的代码中,被替换掉
        String sql = "insert into student values(?,?)";

//        String sql = "drop table student";
//        String sql = "create table student(id int primary key,name varchar(20))";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1,id);//1,表示第一个?
        statement.setString(2,name);//2,表示第二个?
        System.out.println(statement);//包含了完整的sql语句

//执行
        int ret = statement.executeUpdate();
        System.out.println(ret + " rows affected");
        statement.close();
        connection.close();
    }
}
